本文是学习GB-T 33264-2016 面向多核处理器的机器人实时操作系统应用框架. 而整理的学习笔记,分享出来希望更多人受益,如果存在侵权请及时联系我们
本标准规定了面向多核处理器的机器人实时操作系统的应用程序框架及其设计原则。
本标准适用于机器人实时操作系统开发者、机器人应用软件开发者及机器人操作系统使用者。
下列术语和定义适用于本文件。
2.1
机器人操作系统 robot operating system
由底层操作系统层和软件应用层组成,为机器人提供硬件抽象描述、底层驱动程序管理和程序间的
消息传递等类操作系统功能,以及定位绘图,任务规划,感知与导航等上层应用功能。
注 :具体应用功能术语参照 GB/T 12643—2013。
2.2
多核处理器 multi-core processor
在一个处理器中集成两个或多个完整的计算引擎(内核),每个执行内核是独立的逻辑处理器,并
占用相应的执行资源。
2.3
机器人实时操作系统 real-time robot operating
system
保证机器人在规定的时间内完成特定任务,并能够协调所有实时任务的操作系统。
2.4
中断请求 interrupt request
向 CPU 发出命令请求,让CPU
暂停正在执行的程序,保护现场后去执行相应的处理程序,处理完
成后再继续执行之前的程序。
2.5
消息告知中断 message-signaled interrupt
在系统特定内存地址写入中断数据,通知CPU 中断。
2.6
节 点 node
直接执行运算任务的进程。
2.7
消息 message
一种用于节点间通信的数据结构。
2.8
主题 topic
用于发布/订阅消息内容的特定标识。
GB/T 33264—2016
2.9
服务 service
节点间的通信方式,由一个消息对组成,包括请求消息和回复消息。
2.10
节点管理器 node master
为节点存储主题和服务的注册信息,用于管理节点间的消息交换和调用服务。
2.11
包 package
组织机器人操作系统软件的主要形式,包括节点、独立于机器人操作系统的库、数据集、相关配置文
件以及第三方软件等。
2.12
堆 stack
包的集合,能够提供一个完整的功能。
2.13
传输控制协议/因特网互联协议 transmission control
protocol/internet protocol
因特网最基本的协议,由传输层的TCP 协议和网络层的IP 协议组成。
2.14
用户数据报协议 user datagram protocol
一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务。
2.15
可扩展标记语言 extensible markup language
用于标记电子文件使其具有结构性的标记语言。
2.16
XML 远程过程调用 XML remote procedure call
使 用XML 格式来传输命令和数据,使用 HTTP 作为传输机制。
2.17
虚拟网络 virtual network
一种不包含物理连接,通过网络虚拟化实现的计算机网络。
下列缩略语适用于本文件。
GPOS: 通用操作系统平台(General Platform for Operating System)
IRQ: 中断请求(Interrupt Request)
MSI: 消息告知中断(Message-signaled Interrupt)
ROS: 机器人操作系统(Robot Operating System)
RTOS: 实时操作系统(Real-time Operating System)
RGMP: 混合操作系统软件框架(RTOS and GPOS on Multi-core Processor)
TCP/IP: 传输控制协议/因特网互联协议(Transmission Control
Protocol/Internet Protocol)
UDP: 用户数据报协议(User Datagram Protocol)
VNET: 虚拟网络(Virtual Network)
XML: 可扩展标记语言(Extensible Markup Language)
XML-RPC:XML 远程过程调用(XML Remote Procedure Call)
GB/T 33264—2016
4 机器人实时操作系统的应用框架设计原则
面向多核处理器的机器人实时操作系统的应用框架设计遵循以下原则:跨平台原则、结构分离原
则、功能模块化设计原则、多核分布式管理原则和可扩展原则。
跨平台原则指的是机器人操作系统支持不同的硬件架构,如 Arm 和 X86
等。在不同的硬件架构
下,机器人实时操作系统可以稳定运行。
从机器人操作系统运行平台(如 Arm 和 X86
等)角度,结构分离原则考虑的是非实时和实时操作
系统运行内核的分离,为非实时和实时节点提供不同的运行环境,便于节点管理,并提高节点运行的
效率。
节点按照功能划分进行模块化设计,每个节点具有独立的与平台无关的功能,提供机器人应用软件
复用性的支持。
具有独立功能的节点采用拓扑分布式的管理模式,便于操作系统应用软件层的集成和扩展。多核
分布式管理原则包括两方面:核间的节点分布和单个内核上的节点分布。
可扩展原则是指机器人操作系统通过集成第三方(如机器人操作系统应用软件开发者或操作系统
无关的第三方库)的功能,快速改进或增加现有软件应用功能。功能模块化设计原则和多核分布式管理
原则是可扩展原则实现的前提。
机器人实时操作系统的应用框架反映的是面向多核处理器的操作系统各组件的功能划分和相互之
间的关系。如图1所示,机器人实时操作系统是一种 Linux 与 RTOS
相结合的混杂操作系统,称为
RGMP(RTOS and GPOS on Multi-core Processor)。
GB/T 33264—2016
style="width:7.6in;height:6.26736in" />
图 1 机器人实时操作系统的应用框架 RGMP
机器人实时操作系统的应用框架为层次化结构模型,自下而上分别为:
——硬件层:主要是多核处理器运算内核,为操作系统提供一个稳定的硬件平台,是
RGMP 正常运
行的基础层。
——底层操作系统层:在一个多核处理器的不同核上同时运行 Linux 和 RTOS,
为上层应用软件提
供底层的运行环境。其中一个核运行RTOS,
用于运行实时节点,其他核运行通用Linux。
——设备驱动层:主要提供操作系统支持下的硬件设备驱动程序、设备协议程序和设备服务程
序等。
——网络接口层:为 Linux 和 RTOS
提供一个快速稳定的通信接口,传递节点运行必要的信息、系
统运行状态信息等。
——软件应用层:软件应用以实时节点与非实时节点的形式运行,通过协调组织各应用软件功能构
件,实现机器人感知、行动、思维、人机交互等基本功能。
在层次化结构模型下,机器人实时操作系统应用框架规定了机器人操作系统研究和开发过程中中
断管理、分布式运行、通信接口、应用编程接口以及节点通信自定义消息等相关内容。
中断管理的原则是让不同类型的操作系统各自运行在不同的CPU
核中,互不影响,即不同的 CPU
享有各自独立的外部设备以及外部中断,当几个外部设备共享一条 IRQ
总线的时候,RGMP 会针对不
同的情况有着各自的策略,具体如下:
——所有外部设备都是非实时设备:RGMP 在运行实时操作系统的 CPU 屏蔽该 IRQ
中断,让
Linux 完全接管整条中断线。
——所有外部设备都是实时设备:RGMP 对 I/O
APIC进行配置,采用静态分发的方式将此 IRQ
静态发送到实时操作系统所使用的CPU
中,最大限度地提高实时操作系统的响应速度。
——一条 IRQ 线上同时有实时与非实时中断:如果实时设备不支持 MSI,
为了提高系统整体的实 时性,无论是实时系统还是非实时系统,RGMP
让一条总线上的 IRQ 全部路由到同一个操作
系统使用的 CPU 中。
GB/T 33264—2016
在RGMP
应用框架中同时运行实时节点和非实时节点。如图2所示,节点的运行采用分布式架
构,各个实时与非实时节点之间的功能都是彼此独立的,便于复杂系统中节点的管理,便于根据机器人
应用场合的不同更改节点程序,实现对机器人的控制,提高机器人对不同外设的兼容性,并利用ROS
丰
富的软件资源,扩展机器人的功能。另外,根据不同的控制场合,所有存在于非实时节点上的功能节点
可以被安装于远程计算机中,远程计算机通过以太网与本地机器人控制器相连接,实现对机器人的远程
控制。
节点部署的原则是实时节点拥有相对较高的任务优先级与中断优先级,运行在
RTOS 操作系统 上,非实时节点的运行方式与普通 Linux 程序相同,运行在
Linux 上。如图2所示,实时性要求高的节 点运行在 RTOS
上,主要负责对机器人的各个关节进行闭环控制外加部分运动学解算,而非实时节点
的主要功能包括机器人的三维动态仿真、人机交互、运动学解算等。
style="width:8.26736in;height:5.92708in" />
图 2 分布式应用软件框架
通信接口规定了三种不同类型,包括实时节点与非实时节点之间、ROS
节点之间和实时 ROS 节点
之间通信:
——实时节点与非实时节点之间:使用标准的ROS
节点通信传输协议。在实时与非实时节点之间
创建一个以虚拟网络为接口,以提高通信效率同时保持程序的可移植性。底层用共享内存的
方式实现的虚拟网桥"VNET"。
在系统运行时,实时节点与任何种类的节点通信都首先要通
过 VNET 虚拟网桥。
——ROS 节点间的通信:建立在TCP/IP
标准协议之上,节点之间通过在网络层发送标准的 TCP 或者 UDP
包进行通信。通信协议封装成 Topic 与 Message 两种形式,便于使用 ROS
提供的
标准C++ 接口函数实现节点间的数据收发。
——实时 ROS 节点之间的通信:使用XML-RPC
协议。所有的消息在发送前以符合XML-RPC 消
息格式的方式进行打包。在接受消息的时候以相同的协议进行解包。这样的流程在分布式系
统中便于节点间的数据通信的管理,降低应用程序开发人员的负担,增加程序的可移植性。在
GB/T 33264—2016
实时节点通信的网络层,使用标准的TCP 网络通信协议。
应用编程接口规定实时操作系统级函数接口、非实时节点、实时节点的应用编程接口规范,为机器
人实时操作系统提供一个统一的标准规范。
机器人实时操作系统作为混合系统软件框架,为实时操作系统提供了良好的函数接口。为了方便
用户开发,它提供满足操作系统基本功能的链接库
librgmp.a和与移植相关的头文件 rtos.h。用户要移
植实时操作系统,不需要再考虑实时操作系统对于 CPU 模式转换、CPU
初始化等问题,甚至不需要再
编写与实时操作系统启动相关的汇编代码,就可以实现对于实时操作系统的移植。实时系统需要移植
的关键函数与变量的相关功能参见附录 A 表 A.1。
非实时节点运行以机器人操作系统 ROS 平台上,所有 ROS 的 Node
节点都是由不同 ROS 的 Packages
经过编译产生的。根据面向对象编程的特点,ROS 节点能够通过继承不同的
Packages 让系 统拥有各种复杂功能。所有的 ROS 节点都需要继承几个 ROS
核心功能包,如 roscore,roscpp,
roslang等。
编写ROS 功能节点程序就必须调用ROS 的相关资源库,ROS 所使用的库除了
Linux 的标准系统
调用以外,还有一些与 C++
相关的模板库和与节点通信相关的函数库,主要包括:Boost,Libc,XML-
RPC,Math 等。具体非实时节点的应用编程接口参见B.1~B.11 所示。
在实时系统上开发 ROS
实时节点的软件框架,其代码与操作系统无关,以应用程序的形式存在于
实时系统当中。在标准 ROS 中,依赖 C++ 语言的 ROS 功能节点都是基于 ROSCPP
核心节点包和 XML-RPC 通信协议栈。考虑到 ROS 实时节点的可移植性,将
XML-RPC 功能与 ROSCPP 的核心功 能统一封装在一个与系统无关的 ROS
功能节点包 RTroscpp 中。利用RTroscpp 提供的基本接口开发
与 ROS 系统函数库无关但是符合 ROS 标准通信协议的ROS 功能节点。
在实时操作系统 RTOS 中,用户要编写自己的 ROS
节点,还需要定义相关的消息头文件。在标准 ROS 中,自定义 ROS
消息需要通过标准 ROS 的 msg gen 工具生成关于自定义消息的相关C++ 与
Python 头文件。在头文件中,节点消息是以类的方式呈现的,它继承 ROS
标准消息类,类中包含有针
对自定义消息的打包函数。以下是 ROS 消息在传输过程中的要素:
——callerid:发送消息的节点名字;
——topic:接收消息的节点接收的话题名字;
— service:客户端节点请求的服务名字;
——md5sum: 针对此消息类型的 md5sum 值 ;
——type:消息所包含的数据类型;
——message definition:完整的消息定义(基于C++ 或者是 Python 语言);
——error:在链接错误时的错误消息;
ersistent;由客户端节点发往服务器节点的字段,用于处理多重数据请求
——tcp nodelay:从消息接收端发往发送端的消息。
GB/T 33264—2016
针对不同的消息定义,以上的大部分元素都是不同的,特别是 md5sum
校验码。由于在实时操作 系统中没有相关的msg gen
工具,但是程序员可以把标准 ROS 中生成的消息头文件放置到实时节点
头文件中,就可以使用相关的自定义节点。图3中是数据消息的格式。
消息传输数据包格式
style="width:9.18669in;height:6.29992in" />自定义消息定义
类型l a
类型2 b
· ·
类型n n
数据包头长度(4字节)
message definition字段长度(4字节)
message definition字段
calkrid字段长度(4字节)
callerid字段
latching字段长度(4字节)
latching字段
md5sum 字段长度(4字节)
md5sum 字段
topic字段长度(4字节)
topic字段
message type字段长度(4字节)
message type字段
message body字段长度(4字节)
类型1字段长度(4字节)
类型1字段
· ·
类型n字段长度(4字节)
类型n字段
图 3 ROS 自定义消息的转换
GB/T 33264—2016
(资料性附录)
实时系统需要移植的关键函数和变量的相关功能
机器人实时操作系统为实时操作系统提供了良好的函数接口,便于用户移植实时操作系统。实时
系统需要移植的关键函数与变量的相关功能如表 A.1 所示。
表 A.1 实时系统需要移植的关键函数和变量的相关功能
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
GB/T 33264—2016
(资料性附录)
非实时节点应用编程接口
ROS 所使用的库除了Linux 的标准系统调用以外,还有一些与 C++
相关的模板库和与节点通信
相关的函数库,为非实时节点的应用提供了丰富的接口。
B.1 roscpp.ROS 应用接口
为用户提供库,使C++ 用户可以很快地链接到 ROS 的
topics,services和参数,如表B.1 所示。
表 B.1 关于应用接口的 C++ 接口类型及说明
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
B.2 common msgs. 基本数据类型接口
基本数据类型接口包含了ROS 功能包广泛用到的消息类型,如表 B.2 所示。
表 B.2 关于基本数据类型接口的消息类型及说明
|
|
---|---|
|
|
|
|
GB/T 33264—2016
表 B.2 ( 续 )
|
|
---|---|
|
|
|
|
|
|
B.3 message filters.操作信息接口
根据过滤器的条件,输入和输出所对应的消息,如表 B.3 所示。
表 B.3 关于操作信息接口的 C++ 接口类型及说明
|
|
---|---|
|
|
|
|
|
|
|
|
B.4 drivers.驱 动 接 口
驱动接口包含了常用的驱动类型,如表B.4 所示。
表 B.4 关于驱动接口的 C++ 接口类型及说明
|
|
---|---|
|
|
|
|
|
|
|
|
|
|
B.5 3D processing.3D 数据处理编程接口
3D 数据处理编程接口包含了常用的3D 处理编程库,如表 B.5 所示。
GB/T 33264—2016
表 B.5 关 于 3D 数据处理编程接口的 C++
接口类型及说明
|
|
---|---|
3D processing |
|
|
|
B.6 image common. 基本图像处理编程接口
基本图像处理编程接口包含了ROS 里的基本图像处理功能,如表B.6 所示。
表 B.6 关于基本图像处理编程接口的功能包类型及说明
|
|
---|---|
|
|
|
|
|
|
|
|
B.7 image pipeline.图像传递编程接口
为原始图像数据提供中间处理,以用于最终高水平的处理,如表B.7 所示。
表 B.7 关于图像传递编程接口的主题类型及说明
|
|
---|---|
|
|
|
|
|
|
B.8 vision opencv.OpenCV 编程接口
链接 ROS 与 OpenCV 的功能包,提供处理计算机实时图像的函数库,如表B.8
所示。
表 B.8 关 于 OpenCV 编程接口的功能包类型及说明
|
|
---|---|
|
|
|
|
GB/T 33264—2016
B.9 Transforms/Coordinates.坐标转换接口
坐标转换接口包含了对机器人姿态和坐标转换的功能包,如表 B.9 所示。
表 B.9 关于坐标转换接口的功能包类型及说明
|
|
---|---|
|
|
|
|
|
|
B.10 simulator gazebo.3D仿真编程接口
利用ROS 为机器人提供3D 仿真环境,如表 B.10 所示。
表 B.10 关 于 3D 仿真编程接口的主题类型及说明
style="width:0.56656in;height:0.5467in" />
|
|
---|---|
|
|
|
|
B.11 move arm. 机器人运动规划编程接口
对机械臂实现点到点的运行控制,并规划关节的运动轨迹,具体说明如表B.11~
表 B.15 所示。
表 B.11 ROS 参数名称、参数类型及说明
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表 B.12 订阅主题名称、主题类型及说明
|
|
|
---|---|---|
|
|
|
|
|
|
GB/T 33264—2016
表 B.13 发布主题名称、主题类型及说明
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
表 B.14 服务名称、主题类型及说明
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
表 B.15 可视化主题名称、主题类型及说明
|
|
|
---|---|---|
|
|
|
|
|
|
|
|
|
GB/T 33264—2016
更多内容 可以 GB-T 33264-2016 面向多核处理器的机器人实时操作系统应用框架. 进一步学习